/**
 * @file app_sys.h
 * @brief 包含应用系统相关的函数声明。
 *
 * 本文件定义了一些用于处理数据类型转换的实用函数，包括将
 * 32 位无符号整数转换为 8 位无符号整数数组的函数。
 *
 * @note 本文件支持 C++ 调用。
 */

#ifndef APP_SYS_H
#define APP_SYS_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>
#include <stddef.h>
#include "main.h"
#include "sys_manager.h"

#define TIM_BASE_UNIT_10MS  10
#define TIM_LOW_VOLTAGE_REPORT_COUNT_10MS 100

typedef struct 
{
    volatile uint32_t sys_tick;    // 替代HAL_GetTick()
    uint8_t dec_counter;
    uint8_t adc_update_flag : 1;
    uint8_t heartbeat_flag : 1;
    uint8_t key_timeout_flag : 1;
    uint8_t pwr_manage_flag : 1;
    uint8_t resv :4;
} system_timer_t;

extern system_timer_t sys_timer;

/**
 * @brief 延时指定的微秒数。
 *
 * 此函数使用硬件定时器创建精确的延时。
 *
 * @param counter 延时的微秒数。
 */
void delay_us(uint32_t counter);

void delay_ms(uint32_t ms);

uint32_t sys_get_tick(void);

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

void app_sys_init(void);

// void app_adc_data_erase_page();

// void app_adc_data_write_flash(uint32_t addr, uint16_t data[], uint16_t len);

// void app_sw_enable(void);

// void app_log(const char *str);

#ifdef __cplusplus
}
#endif

#endif /* APP_SYS_H */
